package Modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Persistence;
import javax.persistence.Query;


@Entity
public class PreguntaCompuesta extends Pregunta implements Serializable {
    private static final long serialVersionUID = 1L;
       @OneToMany(cascade = CascadeType.ALL)
    private List<Etiqueta> etiquetas;

    public PreguntaCompuesta() {
    etiquetas= new ArrayList<Etiqueta>();
    }

  private PreguntaCompuesta(String pre,String tipo) {
        super(pre,tipo);
        etiquetas=new ArrayList<Etiqueta>();
    }
    

    public List<Etiqueta> getEtiquetas() {
        return etiquetas;
    }

    public void setEtiquetas(List<Etiqueta> etiquetas) {
        this.etiquetas = etiquetas;
    }


   

   
     public Long agregarP(String pre) {
        try{
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        PreguntaCompuesta pc = new PreguntaCompuesta(pre,"5");
        em.getTransaction().begin();
        em.persist(pc);
        em.getTransaction().commit();
        Query q = (Query) em.createQuery("select Max(c.id) from Pregunta c");
        return (Long) q.getSingleResult();
        }catch(Exception e){
        System.out.println("+++errrorr");
        }
        return null;

    }

     public void asignarE(Long id, Long e) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
        EntityManager em = emf.createEntityManager();
        PreguntaCompuesta p = em.find(PreguntaCompuesta.class, id);
        Etiqueta et=em.find(Etiqueta.class, e);
        p.addEt(et);
        em.getTransaction().begin();
        em.persist(p);
        em.getTransaction().commit();
        em.close();
        emf.close();
    }

     public void borrarEtiquetas(Long id){
         EntityManagerFactory emf = Persistence.createEntityManagerFactory("APU");
         EntityManager em = emf.createEntityManager();
         PreguntaCompuesta p = em.find(PreguntaCompuesta.class, id);
         em.getTransaction().begin();
         List l = p.getEtiquetas();
         Iterator i = l.iterator();
         while (i.hasNext()) {
             Etiqueta e = (Etiqueta) i.next();
             Etiqueta et = em.find(Etiqueta.class, e.getId());
             List l2 = et.getRespuestas();
             Iterator i2 = l2.iterator();
             while (i2.hasNext()) {
                 Respuesta res = (Respuesta) i2.next();
                 Respuesta res2 = em.find(Respuesta.class, res.getId());
                 em.remove(res2);
             }


             em.remove(et);
         }
         p.getEtiquetas().clear();
         em.persist(p);
         em.getTransaction().commit();
         em.close();
         emf.close();
    }


    private void addEt(Etiqueta e) {
        this.etiquetas.add(e);
    }

}
